package br.com.tcc.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import br.com.tcc.dao.ListaComprasDAO;
import br.com.tcc.dao.ListaDeComprasAndProdutoDAO;
import br.com.tcc.model.ListaCompras;
import br.com.tcc.model.ListaDeComprasAndProduto;
import br.com.tcc.model.Usuario;
import br.com.tcc.util.Utils;


@ManagedBean(name="listaComprasBean")
@SessionScoped
public class ListaComprasBean {
	
	Logger logger = Logger.getLogger(ListaComprasBean.class);
	
	private List<ListaDeComprasAndProduto> lProdutos;
	
	private ListaCompras listaCompras;
	
	private ListaCompras listaSelected;
	
	private List<ListaCompras> listaSalvas = null;
	
	private int idUser;
	
	ListaComprasDAO lDAO = new ListaComprasDAO();
	
	public String minhasListas(){
		listaSalvas = null;
		return "minhasListas";
	}
	
	/**
	 * tratar para salvar uma lista de compra para um usuario
	 */
	public void salvarLista() {
		if (getlProdutos() != null && lProdutos.size() != 0) {
			Usuario usuario;
			boolean erro = true;

			usuario = Utils.recuperaUsuarioSessao();
			
			//Adiconar os produtos do carrinho e o usario da sessao para salvar a lista ^^
			System.out.println(getlProdutos().get(0).getQtde());
			//Salvar o usuario
			listaCompras.setUsuario(usuario);
//			//Salvar o carrinho..
			listaCompras.setListaDeComprasAndProduto(lProdutos);
			
			listaCompras.setDataDaLista(new Date());
			for (int i = 0; i < lProdutos.size(); i++) {
				lProdutos.get(i).setListaCompras(listaCompras);
			}
			
			erro = lDAO.adicionar(listaCompras);
			if (!erro) {
				Utils.addMessageErro("Sistema temporariamente indisponivel.");
			}else {
				Utils.addMessageSucesso("Lista salva com sucesso.");
				setListaSalvas(lDAO.buscarListasSalvas(usuario.getIdUsuario()));
			}
		}else {
			Utils.addMessageErro("Sua lista nao pode estar vazia.");
		}
	}
	
	public void excluirLista() {
		boolean retorno = true;
		ListaDeComprasAndProdutoDAO listaDAO = new ListaDeComprasAndProdutoDAO();

		retorno = listaDAO.excluirListaSalva(listaCompras.getIdListaCompras());
		if (!retorno) {
			//Remover primeiros os produtos ligados a lista
			Utils.addMessageErro("Sistema Temporariamente indisponivel");
		} else {
			//apagar a lista ^^
			retorno = lDAO.excluirListaSalva(listaCompras.getIdListaCompras());
			if (!retorno) {
				Utils.addMessageErro("Sistema Temporariamente indisponivel");
			} else {
				Utils.addMessageSucesso("Sua lista foi removida com sucesso");
				setListaSalvas(lDAO.buscarListasSalvas(idUser));
			}
		}
	}
	
	public ListaCompras getListaCompras() {
		if (listaCompras == null) {
			listaCompras = new ListaCompras();
		}
		return listaCompras;
	}

	public void setListaCompras(ListaCompras listaCompras) {
		this.listaCompras = listaCompras;
	}

	public List<ListaDeComprasAndProduto> getlProdutos() {
		if (lProdutos == null) {
			lProdutos =  new ArrayList<ListaDeComprasAndProduto>() ;
		}
		return lProdutos;
	}

	public void setlProdutos(List<ListaDeComprasAndProduto> lProdutos) {
		this.lProdutos = lProdutos;
	}

	public List<ListaCompras> getListaSalvas() {
		if (listaSalvas == null) {
			Usuario usuario;
			FacesContext facesContext = FacesContext.getCurrentInstance();
			HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest(); 
			HttpSession session = request.getSession(true);
			usuario = (Usuario) session.getAttribute("userSession");
			if (usuario != null) {
				setListaSalvas(lDAO.buscarListasSalvas(usuario.getIdUsuario()));
			}
		}
		return listaSalvas;
	}

	public void setListaSalvas(List<ListaCompras> listaSalvas) {
		this.listaSalvas = listaSalvas;
	}

	public int getIdUser() {
		return idUser;
	}

	public void setIdUser(int idUser) {
		this.idUser = idUser;
	}

	public ListaCompras getListaSelected() {
		if (listaSelected == null) {
			listaSelected = new ListaCompras();
		}
		return listaSelected;
	}

	public void setListaSelected(ListaCompras listaSelected) {
		this.listaSelected = listaSelected;
	}
}
